ALBのホストヘッダーベースのルーティングをやってみた

ALBのホストヘッダーベースのルーティングをやってみた

Clock Icon2024.11.18

はじめに

URLのホスト名毎に通信するサーバーを切り替えたいということがありました。

イメージとしては
FQDNを aaa.example.com に指定してアクセスするとサーバーA
FQDNを bbb.example.com に指定してアクセスするとサーバーB
に繋がって欲しいといったイメージです。

やってみた

構成図

今回やりたいことを構成図にすると以下のようなイメージになります。
image1

前提として example.com というドメインを取得してRoute53でホストゾーンとして登録しています。

ACMの作成

今回ACMで発行するパブリック証明書は example.com*.example.com です。
サブドメイン用にワイルドカードも作成しておきます。
image2

ALBの作成

ALBを作成します。
今回はリスナールールの検証なので、リスナールール以外は基本デフォルトで作成しています。
image3

リスナールールのデフォルトアクションのみ固定レスポンスで404を返すように設定してあります。
この後に追加する2つのホストへアクセスができなかった場合にNot Foundを返します。
image4

リスナールールの追加

リスナールールを追加していきます。
対象のリスナー > ルールを追加する の順でルールを追加します。
image45
image5

ルール名を入力して条件を追加します。
image6

今回は aaa.example.com がホストヘッダーに含まれて入ればルーティングするように設定します。

ルールの条件タイプ:ホストヘッダー
ホストヘッダー:aaa.example.com
image7

今回は検証のため後続のEC2は作らずに固定レスポンスを返すように設定します。
image8

優先度は100としておきます。
これでルールを追加します。
image9

同じようにサーバーBのルールも作成します。
image10

これでALBの設定は完了です。

Route53への登録

作成したALBへ名前解決するためにRoute53へレコードを追加します。
examole.com*.example.com のAレコードを作成します。
image11

検証

では準備が整ったのでアクセスしてみましょう。
まずはサーバーAから

$ curl https://aaa.example.com
Server A

想定通りホスト名を aaa に設定するとサーバーAにルーティングされました。
同じようにサーバーBも確認します。

$ curl https://bbb.example.com
Server B

サーバーBもルーティングされることが確認できました。
ちなみにどちらにも当てはまらない場合はNot Foundが返ってきます。

$ curl https://example.com
Not Found

おわりに

ALBのホストヘッダーベースのルーティング機能を使えば、異なる目的のアプリケーションをサブドメインで分けて公開することができることがわかりました。
今回はホストヘッダーベースでしたが、ALBではパスベースでルーティングすることもできます。
単一ドメインで複数のアプリケーションを管理する必要がある場合はパスベースルーティングが適しています。
https://repost.aws/ja/knowledge-center/elb-achieve-path-based-routing-alb

Share this article

facebook logohatena logotwitter logo

© Classmethod, Inc. All rights reserved.